Micron Document
<!DOCTYPE html>
<html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-0 vector-toc-not-available vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-0 skin-theme-clientpref-day vector-sticky-header-enabled" lang="de" dir="ltr"><head>
<meta charset="UTF-8">
<title>C++/CLI</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" href="../_res_/favicon.png">
<link rel="canonical" href="https://de.wikipedia.org/wiki/C%2B%2B%2FCLI"> <link href="../_mw_/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="../_mw_/ext.pygments.css" rel="stylesheet" type="text/css">
<link href="../_mw_/ext.wikimediamessages.styles.css" rel="stylesheet" type="text/css">
<link href="../_mw_/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="../_mw_/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="../_mw_/skins.vector.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link href="../_mw_/ext.gadget.citeRef.css" rel="stylesheet" type="text/css">
<link href="../_mw_/ext.gadget.defaultPlainlinks.css" rel="stylesheet" type="text/css">
<link href="../_mw_/ext.gadget.dewikiCommonHide.css" rel="stylesheet" type="text/css">
<link href="../_mw_/ext.gadget.dewikiCommonLayout.css" rel="stylesheet" type="text/css">
<link href="../_mw_/ext.gadget.dewikiCommonStyle.css" rel="stylesheet" type="text/css">
<link href="../_mw_/ext.gadget.dewikiDarkmode.css" rel="stylesheet" type="text/css">
<link href="../_mw_/ext.gadget.dewikiResponsive.css" rel="stylesheet" type="text/css">
<link href="../_mw_/ext.gadget.specialSearch.css" rel="stylesheet" type="text/css">
<link rel="stylesheet" type="text/css" href="../_mw_/site.styles.css">
<link rel="stylesheet" type="text/css" href="../_mw_/noscript.css">
<link rel="stylesheet" type="text/css" href="../_res_/footer.css">
<link rel="stylesheet" type="text/css" href="../_res_/vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-C_CLI rootpage-C_CLI skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">C++/CLI</span></h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="contentSub">
<div id="mw-content-subtitle"></div>
</div>
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="de" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="de" dir="ltr"><p><b>C++/CLI</b> ist eine von <a href="../Microsoft" title="Microsoft">Microsoft</a> entwickelte Variante der <a href="../Programmiersprache" title="Programmiersprache">Programmiersprache</a> <a href="../C%2B%2B" title="C++">C++</a>, die den Zugriff auf die virtuelle <a href="../Laufzeitumgebung" title="Laufzeitumgebung">Laufzeitumgebung</a> des <a href="../.Net-Framework" title=".Net-Framework">.Net-Frameworks</a> mit Hilfe von speziell darauf zugeschnittenen Spracherweiterungen ermöglicht.
</p><p>C++/CLI erfüllt die ebenfalls von Microsoft entwickelte Spezifikation namens <a href="../Common_Language_Infrastructure" title="Common Language Infrastructure">Common Language Infrastructure</a> (CLI) zur Sprach- und Plattform-neutralen Entwicklung und Ausführung von .NET-Anwendungen. Programme, die in C++/CLI geschrieben sind, können vom Compiler in <a href="../Common_Intermediate_Language" title="Common Intermediate Language">CIL</a> übersetzt und auf der <a href="../Virtuelle_Maschine" title="Virtuelle Maschine">virtuellen Maschine</a> der .NET-Plattform betrieben werden.
</p><p>Seit Dezember 2005 liegt ein offiziell von der <a href="../Ecma_International" title="Ecma International">Ecma</a> ratifizierter Standard für C++/CLI vor.
</p><p><a href="../Microsoft_Visual_Studio_.NET" class="mw-redirect" title="Microsoft Visual Studio .NET">Microsoft Visual Studio</a> ab Version 2005 und das Compiler-Frontend der Edison Design Group bieten eine Implementierung von C++/CLI an.<sup id="cite_ref-1" class="reference"><a href="#cite_note-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup>
</p>

<div class="mw-heading mw-heading2"><h2 id="Sinn_und_Zweck_der_Erweiterungen">Sinn und Zweck der Erweiterungen</h2></div>
<p>Ziele bei der Entwicklung von C++/CLI waren:
</p>
<ul><li>Schaffung einer eleganten <a href="../Syntax" title="Syntax">Syntax</a>, die gut zum bisherigen C++ passt. Wer bereits mit C++ vertraut ist, soll die Spracherweiterungen als möglichst natürlich empfinden.</li>
<li>Komfortable Unterstützung von Besonderheiten der CLI wie <a href="../Attribut_(Programmierung)" title="Attribut (Programmierung)">Eigenschaften</a>, <a href="../Ereignis_(Programmierung)" title="Ereignis (Programmierung)">Ereignisse</a>, <a href="../Generischer_Typ" title="Generischer Typ">generische Typen</a>, <a href="../Automatische_Speicherbereinigung" class="mw-redirect" title="Automatische Speicherbereinigung">automatische Speicherbereinigung</a>, <a href="../Referenz_(Programmierung)" title="Referenz (Programmierung)">Referenzklassen</a> usw.</li>
<li>Gute Unterstützung von Sprachmitteln, die im bisherigen C++ verbreitet sind, wie etwa Templates oder deterministische Deinitialisierungen, und zwar für alle Typen, einschließlich der neuartigen CLI-Klassen.</li>
<li>Kompatibilität mit bestehenden C++-Programmen durch das Einbringen von fast ausschließlich reinen Erweiterungen gegenüber <a href="../Internationale_Organisation_f%C3%BCr_Normung" title="Internationale Organisation für Normung">ISO</a>-C++.</li></ul>
<div class="mw-heading mw-heading2"><h2 id="Unterschiede_zu_Managed_C++"><span id="Unterschiede_zu_Managed_C.2B.2B"></span>Unterschiede zu Managed C++</h2></div>
<p>C++/CLI ist das Ergebnis einer grundlegenden Überarbeitung von Managed C++, der ersten Version von C++ mit Spracherweiterungen für die .NET-Plattform. Managed C++ litt unter Akzeptanzproblemen, weil viele Programmierer die Syntaxerweiterungen als schwer lesbar empfanden. Beispielsweise enthielt die Syntax Bestandteile, die nicht eindeutig erkennen ließen, ob verwaltete oder nichtverwaltete <a href="../Objekt_(Programmierung)" title="Objekt (Programmierung)">Objekte</a> erzeugt werden.<sup id="cite_ref-2" class="reference"><a href="#cite_note-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup>
</p><p>Auch wirkten die mit Managed C++ eingeführten Syntaxelemente für viele Programmierer behelfsmäßig in die Sprache integriert. So waren z.&nbsp;B. viele <a href="../Schl%C3%BCsselwort_(Programmierung)" title="Schlüsselwort (Programmierung)">Schlüsselwörter</a> eingeführt worden, die mit zwei Unterstrichen beginnen. Zwar ist dies bei Spracherweiterungen gegenüber Standard-C++ üblich, die große Anzahl solcher Schlüsselwörter, sowie deren starke Durchdringung in Programmen, die von den Erweiterungen Gebrauch machten, wirkten jedoch störend auf das Gesamtbild der Quelltexte.
</p><p>Beispiele:
</p>
<table class="wikitable">
<tbody><tr>
<th>Managed C++
</th>
<th>C++/CLI
</th></tr>
<tr>
<td><span style="font-family:monospace;color:#0000FF">__gc __interface</span>
</td>
<td><span style="font-family:monospace;"><span style="color:#0000FF">interface class</span></span>
</td></tr>
<tr>
<td><span style="font-family:monospace;">Console::WriteLine(<span style="color:#0000FF">S</span>"{0}", <span style="color:#0000FF">__box(</span>15<span style="color:#0000FF">)</span>);</span>
</td>
<td><span style="font-family:monospace;">Console::WriteLine("{0}", 15);</span>
</td></tr>
<tr>
<td align="center" colspan="2">
</td></tr>
<tr>
<td><span style="font-family:monospace;"><span style="color:#0000FF">int</span> f()<span style="color:#0000FF">__gc[]</span>; // Deklaration</span>
</td>
<td><span style="font-family:monospace;"><span style="color:#0000FF">array&lt;int&gt;^</span> f(); // Deklaration</span> <sup>1)</sup>
</td></tr>
<tr>
<td><span style="font-family:monospace;">Object<span style="color:#0000FF">*</span> A <span style="color:#0000FF">__gc[]</span> = { <span style="color:#0000FF">__box(</span>41<span style="color:#0000FF">)</span>, <span style="color:#0000FF">__box(</span>42<span style="color:#0000FF">)</span> };</span>
</td>
<td><span style="font-family:monospace;"><span style="color:#0000FF">array&lt;</span>Object<span style="color:#0000FF">^&gt;^</span> A = { 41, 42 };</span>
</td></tr></tbody></table>
<p>1) Deklaration einer Funktion f, die eine CLI-Reihung (array) zurückgibt.
</p><p>Im Unterschied zu Managed C++ wird die <a href="../Destruktor" class="mw-redirect" title="Destruktor">Destruktor</a>-Syntax <code>~T()</code> nicht mehr auf den <a href="../Garbage_Collection#Finalisierung" title="Garbage Collection">Finalisierer</a> abgebildet. Destruktor und Finalisierer werden in C++/CLI unterschieden; der Finalisierer hat jetzt die Syntax <code>!T()</code>. Der Destruktor ist außerdem identisch mit der Funktion <code>Dispose</code> (dies wurde durch technische Änderungen an der <a href="../Common_Language_Runtime" title="Common Language Runtime">CLR</a> ermöglicht).
</p>
<div class="mw-heading mw-heading2"><h2 id="Weitere_Neuerungen">Weitere Neuerungen</h2></div>
<p>Weitere Neuerungen gegenüber ISO-C++ sind: verbesserte Aufzählungsklassen (enum class), <a href="../Delegate_(CLI)" title="Delegate (CLI)">Delegaten</a>, Verpacken (<i>boxing</i>), Schnittstellenklassen, versiegelte Klassen, <a href="../Attribut_(Programmierung)#" title="Attribut (Programmierung)">Attribute</a> usw.
</p>
<div class="mw-heading mw-heading2"><h2 id="Objektzeiger">Objektzeiger</h2></div>
<p>Die augenfälligste Neuerung ist die Syntax <code>^</code> für Objektzeiger (manchmal auch <i><a href="../Handle" title="Handle">Handles</a></i> genannt). Beispiel:
</p>
<pre>T<span style="color:#0000FF">^</span> whole_object_pointer = <span style="color:#0000FF">gcnew</span> T(a, b);
</pre>
<p>Dabei ist <span style="font-family:monospace;">gcnew</span> ein Operator zur <a href="../Allokation_(Informatik)" title="Allokation (Informatik)">Allokation</a> von Objekten, die von der <a href="../Automatische_Speicherbereinigung" class="mw-redirect" title="Automatische Speicherbereinigung">automatischen Speicherbereinigung</a> verwaltet werden.
</p><p>Im Vergleich dazu die herkömmliche Syntax für <a href="../Zeiger_(Informatik)" title="Zeiger (Informatik)">Zeiger</a>:
</p>
<pre>T<span style="color:#0000FF">*</span> plain_old_pointer = <span style="color:#0000FF">new</span> T(a, b);
</pre>
<div class="mw-heading mw-heading3"><h3 id="Deinitialisierung_und_Speicherfreigabe">Deinitialisierung und Speicherfreigabe</h3></div>
<p>Anders als bei gewöhnlichen Zeigern wird beim Löschen von Handles mittels <code>delete</code> zwar der Destruktor aufgerufen, nicht aber der Speicher freigegeben. Stattdessen wird der vom Objekt belegte Speicher durch die automatische Speicherbereinigung an das System zurückgegeben.
</p><p>Im Unterschied zu anderen Sprachen mit automatischer Speicherbereinigung (z.&nbsp;B. <a href="../C-Sharp" title="C-Sharp">C#</a> oder <a href="../Java_(Programmiersprache)" title="Java (Programmiersprache)">Java</a>) wird hier also die problematische Zusammenfassung der Verwaltung von Speicher und anderen Ressourcen voneinander getrennt: Speicher und andere Ressourcen werden nicht mehr zusammen mit Hilfe der Speicherbereinigung freigegeben (also keine deterministische Deinitialisierung); siehe <a href="../Automatische_Speicherbereinigung#Finalisierung" class="mw-redirect" title="Automatische Speicherbereinigung">Finalisierung</a>.
</p>
<div class="mw-heading mw-heading3"><h3 id="Als_automatische_Variablen_anlegbare_CLI-Objekte">Als automatische Variablen anlegbare CLI-Objekte</h3></div>
<p>Eine weitere technische Neuerung und einer der wichtigsten Unterschiede zu anderen Sprachen mit automatischer Speicherbereinigung sind die als <a href="../Automatische_Variable" class="mw-redirect" title="Automatische Variable">automatische Variablen</a> (d.&nbsp;h. auf dem Stack) anlegbaren CLI-Objekte. Die Lebensdauer von automatischen Variablen endet in dem Augenblick, in welchem sie ihren <a href="../G%C3%BCltigkeitsbereich" class="mw-redirect" title="Gültigkeitsbereich">Gültigkeitsbereich</a> verlassen.
</p><p>Im Zusammenspiel mit den neuartigen Objektzeigern bleiben in C++ dadurch häufig angewandte Programmiertechniken wie <a href="../Ressourcenbelegung_ist_Initialisierung" title="Ressourcenbelegung ist Initialisierung">RAII</a> (Abkürzung für engl. <i>resource acquisition is initialization</i>) auch für die mit der automatischen Speicherbereinigung verwalteten CLI-Objekte möglich. Fehleranfällige Kodiertechniken, wie sie aus anderen Programmiersprachen bekannt sind, lassen sich damit vermeiden.
</p><p>Dazu ein Beispiel in C++/CLI:
</p>
<div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="kt">void</span><span class="w"> </span><span class="nf">Uebertragung</span><span class="p">()</span>
<span class="p">{</span>
<span class="w"> </span><span class="n">MessageQueue</span><span class="w"> </span><span class="n">source</span><span class="p">(</span><span class="s">"server</span><span class="se">\\</span><span class="s">sourceQueue"</span><span class="p">);</span>
<span class="w"> </span><span class="n">String</span><span class="o">^</span><span class="w"> </span><span class="n">mqname</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">safe_cast</span><span class="o">&lt;</span><span class="n">String</span><span class="o">^&gt;</span><span class="p">(</span><span class="n">source</span><span class="p">.</span><span class="n">Receive</span><span class="p">().</span><span class="n">Body</span><span class="p">);</span>

<span class="w"> </span><span class="n">MessageQueue</span><span class="w"> </span><span class="n">dest1</span><span class="p">(</span><span class="s">"server</span><span class="se">\\</span><span class="s">"</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">mqname</span><span class="p">),</span><span class="w"> </span><span class="n">dest2</span><span class="p">(</span><span class="s">"backup</span><span class="se">\\</span><span class="s">"</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">mqname</span><span class="p">);</span>
<span class="w"> </span><span class="n">Message</span><span class="o">^</span><span class="w"> </span><span class="n">message</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">source</span><span class="p">.</span><span class="n">Receive</span><span class="p">();</span>
<span class="w"> </span><span class="n">dest1</span><span class="p">.</span><span class="n">Send</span><span class="p">(</span><span class="n">message</span><span class="p">);</span>
<span class="w"> </span><span class="n">dest2</span><span class="p">.</span><span class="n">Send</span><span class="p">(</span><span class="n">message</span><span class="p">);</span>
<span class="p">}</span>
</pre></div>
<p>Beim Verlassen der Funktion <code>Uebertragung</code> (mit <code>return</code> oder beim Auftreten einer <a href="../Ausnahmebehandlung" title="Ausnahmebehandlung">Ausnahme</a>) rufen Objekte implizit ihre Funktion <code>Dispose</code> auf, und zwar in umgekehrter Reihenfolge zu ihrer Konstruktion. Im obigen Beispiel also wird zuerst der Destruktor von <code>dest2</code> aufgerufen, dann der von <code>dest1</code> und zuletzt der von <code>source</code>, da diese Objekte in der Reihenfolge <code>source</code>, <code>dest1</code>, <code>dest2</code> konstruiert wurden.
</p><p>Wenn ein automatisches Objekt seinen Gültigkeitsbereich verlässt, oder beim Löschen mit <code>delete</code> wird sein Destruktor aufgerufen. Der Compiler unterdrückt dann den Aufruf der normalerweise von der automatischen Speicherverwaltung angestoßenen <a href="../Automatische_Speicherbereinigung#Finalisierung" class="mw-redirect" title="Automatische Speicherbereinigung">Finalisierungsfunktion</a>.
</p><p>Der Wegfall von Finalisierungsfunktionen kann sich insgesamt positiv auf die Ausführungsgeschwindigkeit auswirken, hilft aber noch andere Probleme zu vermeiden; zu Problemen bei Verwendung der Finalisierungsfunktion siehe <a href="../Automatische_Speicherbereinigung#Finalisierung" class="mw-redirect" title="Automatische Speicherbereinigung">Finalisierung</a>.
</p><p>Im Unterschied zu C++/CLI muss beispielsweise in Java oder C# zur Ressourcenfreigabe eine entsprechende Funktion (in C# <code>Dispose</code>, in Java meist <code>close</code>) immer explizit aufgerufen werden. Beide Sprachen haben daher spezielle Syntaxkonstrukte entwickelt, mit denen solche Aufrufe sichergestellt werden sollen: In C# sind das die sogenannten <i>using-Blöcke</i>, in Java das <i>try-with-resources</i>-Konstrukt. Solche Blöcke nehmen dem Programmierer zwar die Sicherstellung von Dispose-Aufrufen beim Verlassen des Blocks ab, müssen aber immer mitangegeben werden und sind daher in dieser Hinsicht immer noch fehleranfälliger als die deterministische Deinitialisierung von C++/CLI.
</p>
<div class="mw-heading mw-heading2"><h2 id="Vergleich_mit_anderen_.NET-Sprachen">Vergleich mit anderen .NET-Sprachen</h2></div>
<p>Eine Besonderheit von C++/CLI ist die Mischbarkeit von Code, der auf der virtuellen Maschine läuft, und Code, der direkt auf der <a href="../CPU" class="mw-redirect" title="CPU">CPU</a> ausgeführt wird. Beide Arten von Programmcode können in einer einzigen Programmdatei zusammengestellt werden.<sup id="cite_ref-3" class="reference"><a href="#cite_note-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup> Mit dieser Möglichkeit nimmt C++/CLI bislang eine Sonderstellung unter den .NET-Sprachen ein.
</p>
<div class="mw-heading mw-heading2"><h2 id="Literatur">Literatur</h2></div>
<ul><li>Julian Templeman: <cite class="lang" lang="en" dir="auto" style="font-style:italic">Microsoft Visual C++/CLI Step by Step</cite>. Microsoft Press, 2013, ISBN 978-0-7356-7517-9 (englisch).<span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rfr_id=info:sid/de.wikipedia.org:C%2B%2B%2FCLI&amp;rft.au=Julian+Templeman&amp;rft.btitle=Microsoft+Visual+C%2B%2B%2FCLI+Step+by+Step&amp;rft.date=2013&amp;rft.genre=book&amp;rft.isbn=9780735675179&amp;rft.pub=Microsoft+Press" style="display:none">&nbsp;</span></li>
<li>Vivek Ragunathan: <cite class="lang" lang="en" dir="auto" style="font-style:italic">C++/CLI Primer: For .NET Development</cite>. Apress, New York 2016, ISBN 978-1-4842-2366-6 (englisch).<span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rfr_id=info:sid/de.wikipedia.org:C%2B%2B%2FCLI&amp;rft.au=Vivek+Ragunathan&amp;rft.btitle=C%2B%2B%2FCLI+Primer%3A+For+.NET+Development&amp;rft.date=2016&amp;rft.genre=book&amp;rft.isbn=9781484223666&amp;rft.place=New+York&amp;rft.pub=Apress" style="display:none">&nbsp;</span></li>
<li>Gordon Hogenson: <cite class="lang" lang="en" dir="auto" style="font-style:italic">C++/CLI: The Visual C++ Language for .NET</cite>. Apress, New York 2016, ISBN 978-1-4842-2027-6 (englisch).<span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rfr_id=info:sid/de.wikipedia.org:C%2B%2B%2FCLI&amp;rft.au=Gordon+Hogenson&amp;rft.btitle=C%2B%2B%2FCLI%3A+The+Visual+C%2B%2B+Language+for+.NET&amp;rft.date=2016&amp;rft.genre=book&amp;rft.isbn=9781484220276&amp;rft.place=New+York&amp;rft.pub=Apress" style="display:none">&nbsp;</span></li></ul>
<div class="mw-heading mw-heading2"><h2 id="Weblinks">Weblinks</h2></div>
<ul><li><i><a rel="nofollow" class="external text" href="https://www.ecma-international.org/publications-and-standards/standards/ecma-372/">Standard ECMA-372: C++/CLI Language Specification</a></i> (englisch)</li>
<li><i><a rel="nofollow" class="external text" href="https://learn.microsoft.com/en-us/previous-versions/ms379617(v=vs.80)">C++: The Most Powerful Language for .NET Framework</a></i> (englisch)<br>Beschreibung der Gründe für die Syntaxänderungen von Managed C++ nach C++/CLI.</li></ul>
<div class="mw-heading mw-heading2"><h2 id="Einzelnachweise">Einzelnachweise</h2></div>
<ol class="references">
<li id="cite_note-1"><span class="mw-cite-backlink"><a href="#cite_ref-1">↑</a></span> <span class="reference-text"><span class="cite"><a rel="nofollow" class="external text" href="https://www.edg.com/docs/edg_cpp.pdf"><i>C++ Front End.</i></a> (PDF; 529&nbsp;kB) Internal Documentation (excerpt); Version 6.5. In: <i>edg.com.</i> Edison Design Group, 21.&nbsp;Juni 2023,<span class="Abrufdatum"> abgerufen am 8.&nbsp;August 2023</span> (englisch).</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Fde.wikipedia.org%3AC%2B%2B%2FCLI&amp;rft.title=C%2B%2B+Front+End&amp;rft.description=C%2B%2B+Front+End&amp;rft.identifier=https%3A%2F%2Fwww.edg.com%2Fdocs%2Fedg_cpp.pdf&amp;rft.publisher=Edison+Design+Group&amp;rft.date=2023-06-21&amp;rft.language=en">&nbsp;</span></span>
</li>
<li id="cite_note-2"><span class="mw-cite-backlink"><a href="#cite_ref-2">↑</a></span> <span class="reference-text"><span class="cite">Kenny Kerr: <a rel="nofollow" class="external text" href="https://learn.microsoft.com/en-us/previous-versions/ms379617(v=vs.80)"><i>C++: The Most Powerful Language for .NET Framework.</i></a> In: <i>learn.microsoft.com.</i> Microsoft, Juli 2004,<span class="Abrufdatum"> abgerufen am 21.&nbsp;Oktober 2010</span> (englisch).</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Fde.wikipedia.org%3AC%2B%2B%2FCLI&amp;rft.title=C%2B%2B%3A+The+Most+Powerful+Language+for+.NET+Framework&amp;rft.description=C%2B%2B%3A+The+Most+Powerful+Language+for+.NET+Framework&amp;rft.identifier=https%3A%2F%2Flearn.microsoft.com%2Fen-us%2Fprevious-versions%2Fms379617%28v%3Dvs.80%29&amp;rft.creator=Kenny+Kerr&amp;rft.publisher=Microsoft&amp;rft.date=2004-07&amp;rft.language=en">&nbsp;</span></span>
</li>
<li id="cite_note-3"><span class="mw-cite-backlink"><a href="#cite_ref-3">↑</a></span> <span class="reference-text"><span class="cite">Tyler Whitney et al.: <a rel="nofollow" class="external text" href="https://learn.microsoft.com/en-us/cpp/dotnet/mixed-native-and-managed-assemblies"><i>Mixed (native and managed) assemblies.</i></a> In: <i>learn.microsoft.com.</i> Microsoft, 3.&nbsp;August 2021,<span class="Abrufdatum"> abgerufen am 8.&nbsp;August 2023</span> (englisch).</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Fde.wikipedia.org%3AC%2B%2B%2FCLI&amp;rft.title=Mixed+%28native+and+managed%29+assemblies&amp;rft.description=Mixed+%28native+and+managed%29+assemblies&amp;rft.identifier=https%3A%2F%2Flearn.microsoft.com%2Fen-us%2Fcpp%2Fdotnet%2Fmixed-native-and-managed-assemblies&amp;rft.creator=Tyler+Whitney+et+al.&amp;rft.publisher=Microsoft&amp;rft.date=2021-08-03&amp;rft.language=en">&nbsp;</span></span>
</li>
</ol></div><!--htdig_noindex--><div><div class="zim-footer">
Dieser Artikel wurde von <a class="external text" title="Zuletzt bearbeitet am 2025-06-24" href="https://de.wikipedia.org/wiki/?title=C%2B%2B%2FCLI&amp;oldid=257319213">Wikipedia</a> herausgegeben. Der Text ist unter <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.de">Creative Commons Attribution-Share Alike 4.0</a> verfügbar, sofern nicht anders angegeben. Für die Mediendateien können zusätzliche Bedingungen gelten.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
<script src="../_webp_/webpHandler.js"></script>

</body></html>